#include <stdio.h>

int main()
{

    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};

    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    int(*p)[3] = a;
    // 指针的长度, p 就是一个地址，长度为8， *p是1行的长度，**p是具体的数值
    printf("指针的长度\n");
    printf("%d\n",sizeof(p));
    printf("%d\n",sizeof(*p));
     printf("%d\n",sizeof(**p));
    printf("*****************************\n");
    // *(p+0)指的是第一行的地址，
    // *(p+1)是第二行地址, p是数组指针，p+1的时候地址增加了 3*4
    // *(*p+1) 表示的是 a[0][1]
    // *(*(p+1)+1) 表示的是 a[1][1]

    printf("%d \n", **p);
    printf("%d \n", **(p+1));
    printf("%d \n", *(*p+1));
    printf("%d \n", *(*(p+1)+1));
    
    printf("指针数组：\n");
    int *q[2]  ;
    for(int i=0;i<2;i++){
        q[i] = a[i]; //将每一行都地址都赋值给指针数组,*q存放的是第一行地址
        // *(q+1)存放第二行地址   
    } 
    printf("%d \n", **q);
 
    printf("%d \n", *(*(q+1)+1));
    return 0;
}